exponential_learning_rate_function_utilities.f90 Source File

This module defines a class to define learning rate functions


This file depends on

sourcefile~~exponential_learning_rate_function_utilities.f90~~EfferentGraph sourcefile~exponential_learning_rate_function_utilities.f90 exponential_learning_rate_function_utilities.f90 sourcefile~learning_rate_function_base_utilities.f90 learning_rate_function_base_utilities.f90 sourcefile~exponential_learning_rate_function_utilities.f90->sourcefile~learning_rate_function_base_utilities.f90 sourcefile~precision_utilities.f90 precision_utilities.f90 sourcefile~exponential_learning_rate_function_utilities.f90->sourcefile~precision_utilities.f90 sourcefile~learning_rate_function_base_utilities.f90->sourcefile~precision_utilities.f90

Files dependent on this one

sourcefile~~exponential_learning_rate_function_utilities.f90~~AfferentGraph sourcefile~exponential_learning_rate_function_utilities.f90 exponential_learning_rate_function_utilities.f90 sourcefile~factory_learning_rate_function_utilities.f90 factory_learning_rate_function_utilities.f90 sourcefile~factory_learning_rate_function_utilities.f90->sourcefile~exponential_learning_rate_function_utilities.f90

Source Code

!! author: Oscar Garcia-Cabrejo
!! date: 03/17/2025
!! version: 0.1
!! This module defines a class to define learning rate functions
module exponential_learning_rate_function_utilities
    use precision_utilities, only: wp;
    use learning_rate_function_base_utilities, only: learning_rate_function_base;
    !
    implicit none;
    !
    private;
    !
    type,extends(learning_rate_function_base) :: exponential_learning_rate_function
        private
            real(kind=wp) :: lambda0,tau
        contains
            procedure,public :: set_parameters
            procedure,public :: calculate => calculate_exponential_function
    end type exponential_learning_rate_function
    !
    public :: exponential_learning_rate_function;
!
contains
    subroutine set_parameters(learning_rate_fn,lambda0,tau)
        class(exponential_learning_rate_function) :: learning_rate_fn
        real(kind=wp) :: lambda0,tau
        !
        learning_rate_fn%lambda0=lambda0;
        learning_rate_fn%tau=tau;

    end subroutine set_parameters
    !
    function calculate_exponential_function(learning_rate_fn,iteration) result(alpha)
        class(exponential_learning_rate_function) :: learning_rate_fn
        !! An `learning_rate_function_base` object
        real(kind=wp),intent(inout) :: iteration
        !! A real variable with the current iteration
        real(kind=wp) :: alpha
        !! A real variable with the learning rate
        real(kind=wp) :: time_factor
        !
        time_factor=-(iteration/learning_rate_fn%tau);
        alpha=max(learning_rate_fn%lambda0*dexp(time_factor),0.01_wp);
!
    end function calculate_exponential_function
!
end module exponential_learning_rate_function_utilities